package main

import (
	"fmt"
	"io"
	"log"
	"os"
	"time"

	"github.com/gin-gonic/gin"
)

//MeMid 定义日志中间件
func MeMid() gin.HandlerFunc {
	return func(c *gin.Context) {
		t := time.Now()
		// gin 上下文定义变量
		c.Set("example", "example")

		// 请求前
		fmt.Println("dong")

		// 执行下文
		c.Next()

		// 终止下文
		// c.Abort()

		// 请求后
		latency := time.Since(t) // 执行时间
		log.Print(latency)

		status := c.Writer.Status()
		log.Println(status)
	}
}

func main() {

	r := gin.Default()

	// 设置输出日志到终端
	// gin.DefaultWriter = os.Stdin
	// 写入日志的文件
	f, _ := os.Create("gin.log")
	gin.DefaultWriter = io.MultiWriter(f)

	r.Use(MeMid())

	// 日志中间件，使用gin.DefaultWriter
	r.Use(gin.Logger())

	// 捕获全局异常
	r.Use(gin.Recovery())

	r.GET("/", func(c *gin.Context) {
		// 获取上下文中的变量
		example := c.MustGet("example").(string)
		log.Println(example)
		c.JSON(200, gin.H{
			"msg": "hello world",
		})
	})

	r.GET("/panic", func(c *gin.Context) {
		panic("my panic")
	})

	err := r.Run(":80")
	if err != nil {
		return 
	}

}
